package cn.iocoder.yudao.module.pplan.service.producerecord;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.pplan.controller.admin.producerecord.vo.ProduceRecordPageReqVO;
import cn.iocoder.yudao.module.pplan.controller.admin.producerecord.vo.ProduceRecordRespVO;
import cn.iocoder.yudao.module.pplan.controller.admin.producerecord.vo.ProduceRecordSaveReqVO;
import cn.iocoder.yudao.module.pplan.controller.admin.producerecord.vo.ProduceRecordUpdateStatusReqVO;
import cn.iocoder.yudao.module.pplan.controller.app.producerecord.vo.AppProduceRecordPageReqVO;
import cn.iocoder.yudao.module.pplan.controller.app.producerecord.vo.AppProduceRecordRespVO;
import cn.iocoder.yudao.module.pplan.controller.app.producerecord.vo.AppProduceRecordSaveReqVO;
import cn.iocoder.yudao.module.pplan.dal.dataobject.producerecord.ProduceRecordDO;

import javax.validation.Valid;
import java.util.List;

/**
 * 生产计划-生产计划记录 Service 接口
 *
 * @author yisl
 */
public interface ProduceRecordService {

    /**
     * 创建生产计划-生产计划记录
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createProduceRecord(@Valid ProduceRecordSaveReqVO createReqVO);

    /**
     * 更新生产计划-生产计划记录
     *
     * @param updateReqVO 更新信息
     */
    void updateProduceRecord(@Valid ProduceRecordSaveReqVO updateReqVO);

    /**
     * 更新生产计划-生产季度计划状态
     *
     * @param updateReqVO 更新信息
     */
    void updateProduceStatus(@Valid ProduceRecordUpdateStatusReqVO updateReqVO);


    /**
     * 删除生产计划-生产计划记录
     *
     * @param id 编号
     */
    void deleteProduceRecord(Long id);

    /**
     * 批量删除生产计划-生产计划记录
     *
     * @param ids 编号
     */
    void deleteProduceRecordListByIds(List<Long> ids);

    /**
     * 获得生产计划-生产计划记录
     *
     * @param id 编号
     * @return 生产计划-生产计划记录
     */
    ProduceRecordRespVO getProduceRecord(Long id);

    /**
     * 获得生产计划-生产计划记录
     *
     * @param flightNo 航班号
     * @return 生产计划-生产计划记录
     */
    ProduceRecordRespVO getProduceRecordByFn(String flightNo);

    /**
     * 获得生产计划-生产计划记录分页
     *
     * @param pageReqVO 分页查询
     * @return 生产计划-生产计划记录分页
     */
    PageResult<ProduceRecordDO> getProduceRecordPage(ProduceRecordPageReqVO pageReqVO);


    /**
     * 更新生产计划-生产计划记录
     *
     * @param updateReqVO 更新信息
     */
    void appUpdateProduceRecord(@Valid AppProduceRecordSaveReqVO updateReqVO);

    /**
     * 获得生产计划-生产计划记录
     *
     * @param id 编号
     * @return 生产计划-生产计划记录
     */
    AppProduceRecordRespVO appGetProduceRecord(Long id);

    /**
     * 获得生产计划-生产计划记录分页
     *
     * @param pageReqVO 分页查询
     * @return 生产计划-生产计划记录分页
     */
    PageResult<AppProduceRecordRespVO> appGetProduceRecordPage(AppProduceRecordPageReqVO pageReqVO);

}